const bcrypt = require('bcryptjs')
const jwt = require('jsonwebtoken')

const db = require('../db/db')
const config = require('../configs/config')


// 处理注册的handler
exports.user_register = (req, res) => {
    // 1. 获取参数
    const user = req.body

    // 2. 校验参数，通过局部中间件进行操作

    // 3. 查询用户是否已经注册
    const select_sql = `SELECT * FROM USERS WHERE username=?`
    db.query(select_sql, user.username, (err, results) => {
        if(err) return res.cc(err)

        if(results.length >= 1) return res.cc('该用户已经注册')

        // 4. 对密码进行加密
        user.password = bcrypt.hashSync(user.password, 10)

        // 5. 将用户信息写入数据库
        const insert_sql = `INSERT INTO USERS set ?`
        db.query(insert_sql, user, (err, results) => {
            if(err) return res.cc(err)

            // 6. 响应结果
            res.send({
                status: 0,
                msg: '恭喜注册成功'
            })
        })
    })
}


// 处理登录的handler
exports.user_login = (req, res) => {
    // 1. 获取数据
    const user = req.body

    // 2. 校验参数，使用express.jio联合jio模块已经进行了校验

    // 3. 查询数据库
    const select_sql = 'SELECT password FROM USERS WHERE username=?'
    db.query(select_sql, user.username, (err, results) => {
        if(err) return res.cc(err)

        if(results.length == 0) return res.cc('该用户未注册')
        // 4. 匹配密码
        const compareResult = bcrypt.compareSync(user.password, results[0].password)
        if(!compareResult) return res.cc('密码错误')

        // 5. 生成jwt
        const jwtStr = jwt.sign({username: user.username}, config.secretKey, {expiresIn: '10h'})

        // 6. 返回响应
        res.send({
            status: 0,
            msg: '登陆成功',
            jwt: jwtStr
        })
    })
    
}


// 处理个人中心的handler
exports.userinfo = (req, res) => {
    res.send({
        status: 0,
        msg: '这是个人中心页面'
    })
}